home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Development / General / MM3Tp.sea Folder / Made by Marksman / Sources / mm / mmD_My_Modal.p < prev    next >
Text File  |  1994-01-16  |  10KB  |  306 lines

  1.  
  2. Unit mmD_My_Modal;
  3. {  mmD_My_Modal                                 Handle this dialog }
  4. {  Copyright © 1994 George R. Cossey }
  5.  
  6. {    File name:  mmD_My_Modal
  7.     Function:  Handle this modal dialog.
  8.  
  9.     This dialog is called when:
  10.  
  11.     History: 1/16/94 Original by George Cossey
  12.  
  13. }
  14.  
  15.  
  16. interface
  17.  
  18.     uses
  19.         Printing,Folders,Sound,mmCommonMM_Demo,CommonMM_Demo,    {}
  20.         mmPA_My_Alert,
  21.         UMy_Modal;
  22.  
  23. procedure InitD_My_Modal;
  24. procedure MPD_My_Modal;
  25.  
  26. { ======================================================= }
  27. { ======================================================= }
  28.  
  29. implementation
  30.  
  31. { ======================================================= }
  32. { ======================================================= }
  33.  
  34. { Routine: InitD_My_Modal }
  35. { Purpose: Initialize the modal dialog, globals and call users routine }
  36.  
  37. procedure InitD_My_Modal;
  38.  
  39.  
  40. begin
  41. Rec_My_Modal.theDialog := nil;
  42.  
  43. Rec_My_Modal.Enable_Cancel2 := true;        { Button }
  44. Rec_My_Modal.Enable_OK3 := true;        { Button }
  45. Rec_My_Modal.Enable_Checkboxes := true;        { Checkbox  }
  46. Rec_My_Modal.Value_Checkboxes := 1;
  47. Rec_My_Modal.Enable_for_selections := true;        { Radio }
  48. Rec_My_Modal.Value_for_selections := 0;
  49. Rec_My_Modal.Enable_Radio_buttons := true;        { Radio }
  50. Rec_My_Modal.Value_Radio_buttons := 1;
  51. Rec_My_Modal.Enable_PopUp := true;        { Popup menu }
  52. Rec_My_Modal.Value_PopUp := 1;
  53.  
  54. D_Init_My_Modal;
  55. end;
  56.  
  57. { ======================================================= }
  58.  
  59. { Routine: MyFilter }
  60. { Purpose: Filter routine for dialog events }
  61.  
  62. function MyFilter(theDialog:DialogPtr;var theEvent:EventRecord;var itemHit:integer):Boolean;
  63. var
  64.     MyPt:Point;                                { Current list selection point }
  65.     tempRect:Rect;                            { Temporary rectangle }
  66.     DType:integer;                            { Type of dialog item }
  67.     DItem:Handle;                            { Handle to the dialog item }
  68.     CItem:ControlHandle;                    { Control handle }
  69.     chCode:integer;                            { Key entered }
  70.     code:integer;                            { Used for FindControl }
  71.     LTemp:longint;                            { Used for time delay }
  72.     MyCmdKey:char;                            { The command key }
  73.     CmdDown:Boolean;                        { Flag for command key used }
  74.     valMyFilter:Boolean;                    { Value to return }
  75.  
  76.  
  77. begin
  78. { Call the user routine }
  79. valMyFilter := D_Filter_My_Modal(theDialog,theEvent,itemHit);
  80.  
  81. { Only do on an update }
  82. if ((theEvent.what = updateEvt)  and (WindowPtr(theEvent.message) = theDialog)) then
  83.     begin
  84.     BeginUpdate(theDialog);                        { Start the update }
  85.     DrawDialog(theDialog);                        { Draw the controls }
  86.     valMyFilter := TRUE;                        { Pass out this special itemHit number }
  87.     itemHit := 32000;                            { Our special ID }
  88.     end;
  89.  
  90. if (theEvent.what = mouseDown) then                { Only do on a mouse click }
  91.     begin
  92.     MyPt := theEvent.where;                        { Get the point where the mouse was clicked }
  93.     GlobalToLocal(MyPt);                        { Convert global to local }
  94.  
  95.     end;
  96.  
  97. CheckKeysInDialog(theDialog,valMyFilter,theEvent,itemHit);
  98.  
  99. MyFilter := valMyFilter;
  100. end;
  101.  
  102. { ======================================================= }
  103.  
  104. { Routine: Refresh_Dialog }
  105. { Purpose: Refresh the dialogs non-controls }
  106.  
  107. procedure Refresh_Dialog;
  108. var
  109.     rTempRect:Rect;                            { Temp rectangle used for drawing }
  110.     DType:integer;                            { Type of dialog item }
  111.     DItem:Handle;                            { Handle to the dialog item }
  112.     CItem:ControlHandle;                    { Control handle }
  113.     Saved_ForeColor:RGBColor;                { Save colors }
  114.     Saved_BackColor:RGBColor;                { Save colors }
  115.     DrawingColor:RGBColor;                    { Place to make colors }
  116.  
  117.  
  118. begin
  119. SetPort(Rec_My_Modal.theDialog);        { Point to our dialog window }
  120. rTempRect := tempRect;                            { Save the current contents of  tempRect }
  121. if (Has.ColorQD) then                            { See if color QuickDraw is around }
  122.     begin
  123.     GetForeColor(Saved_ForeColor);                { Save the fore color }
  124.     GetBackColor(Saved_BackColor);                { Save the back color }
  125.  
  126.     RGBForeColor(Black_ForeColor);                { Set the fore color to Black }
  127.     RGBBackColor(White_BackColor);                { Set the back color to White }
  128.     end;
  129.  
  130. { This is the default selection, when RETURN is pressed. }
  131. HiliteDefaultButton(Rec_My_Modal.theDialog,ResD_Cancel2);
  132.  
  133. { Draw static text }
  134. DrawStaticLine(sResD_Static_Text6,160,95,12,systemFont,[underline]);
  135.  
  136. { Draw static text }
  137. DrawStaticLine(sResD_Static_Text5,10,30,12,helvetica,[bold]);
  138.  
  139. { Draw static text }
  140. DrawStaticLine(sResD_Static_Text4,20,10,12,systemFont,[]);
  141.  
  142. TextSize(12);
  143. TextFont(systemFont);                                { Select the Font that we want }
  144. TextFace([]);                                        { Select the style that we want }
  145.  
  146. if (Has.ColorQD) then                                { See if color QuickDraw is around }
  147.     begin
  148.     RGBForeColor(Saved_ForeColor);                { Restore the fore color }
  149.     RGBBackColor(Saved_BackColor);                { Restore the back color }
  150.     end;
  151.  
  152. D_Refresh_My_Modal(Rec_My_Modal.theDialog);                { Call user refresh routine }
  153. end;
  154.  
  155. { ======================================================= }
  156.  
  157. { Routine: MPD_My_Modal }
  158. { Purpose: Modal dialog }
  159.  
  160. procedure MPD_My_Modal;
  161. var
  162.     tempRect:Rect;                                    { Temporary rectangle }
  163.     DType:integer;                                    { Type of dialog item }
  164.     Index:integer;                                    { For looping }
  165.     DItem:Handle;                                    { Handle to the dialog item }
  166.     CItem:ControlHandle;                            { Control handle }
  167.     CTempItem:ControlHandle;                        { Control handle }
  168.     sTemp:Str255;                                    { Get text entered, temp holding }
  169.     itemHit:integer;                                { Get selection }
  170.     temp:integer;                                    { Get selection, temp holding }
  171.     theSelection:integer;                            { For Palettes }
  172.     theLong,LTemp2:longint;                            { For Hotspot setup }
  173.     theRow:integer;                                    { This is used to define the row used in a list }
  174.     ThisFontInfo:FontInfo;                            { Used to determine List element height }
  175.     ThisEditText:TEHandle;                            { Handle to get the Dialogs TE record }
  176.     TheDialogPtr:DialogPeek;                            { Pointer to Dialogs definition record, contains the TE record }
  177.     SavedPort:GrafPtr;                                { Previous grafport }
  178.     ExitDialog:Boolean;                             { Flag used to exit the Dialog }
  179.     MyPt:Point;
  180.  
  181.  
  182. begin
  183. GetPort(SavedPort);                                    { Get the previous grafport }
  184. HoldOffUserEvents := true;                            { Hold off the user events }
  185.  
  186. Rec_My_Modal.theDialog := GetNewDialog(ResD_My_Modal,nil,WindowPtr(-1));{ Bring in the dialog resource }
  187. SetPort(Rec_My_Modal.theDialog);            { Prepare to add conditional text }
  188. TheDialogPtr := DialogPeek(Rec_My_Modal.theDialog);    { Get to the inner record }
  189. ThisEditText := TheDialogPtr^.textH;                    { Get to the TE record }
  190. HLock(Handle(ThisEditText));                        { Lock it for safety }
  191. ThisEditText^^.txSize := 12;                        { TE Point size }
  192. TextSize(12);                                        { Window Point size }
  193. ThisEditText^^.txFont := systemFont;                { TE Font ID }
  194. TextFont(systemFont);                                { Window Font ID }
  195. ThisEditText^^.txFont := 0;                            { TE Font ID }
  196. ThisEditText^^.fontAscent := 12;                    { Font ascent }
  197. ThisEditText^^.lineHeight := 12 + 3 + 1;            {  Font ascent + descent + leading  }
  198. HUnlock(Handle(ThisEditText));                        { UnLock the handle when done }
  199.  
  200. tempRect := Rec_My_Modal.theDialog^.portRect;            { Get the windows position and size }
  201. tempRect.left := ((screenBits.bounds.right - screenBits.bounds.left) - (tempRect.right - tempRect.left)) div 2;    { Center Horz }
  202. tempRect.top := ((screenBits.bounds.bottom - screenBits.bounds.top) - (tempRect.bottom - tempRect.top)) div 3;    { 1/3 vert }
  203. if (tempRect.top < 40) then                        { Keep below the menu bar }
  204.     tempRect.top := 40;
  205. MoveWindow(Rec_My_Modal.theDialog,tempRect.left,tempRect.top,true);
  206.  
  207. { Button }
  208. SetupNormalControl(Rec_My_Modal.theDialog,ResD_Cancel2,Rec_My_Modal.Enable_Cancel2,0);
  209.  
  210. { Button }
  211. SetupNormalControl(Rec_My_Modal.theDialog,ResD_OK3,Rec_My_Modal.Enable_OK3,0);
  212.  
  213. { Checkbox }
  214. SetupNormalControl(Rec_My_Modal.theDialog,ResD_Checkboxes,Rec_My_Modal.Enable_Checkboxes,
  215.     Rec_My_Modal.Value_Checkboxes);
  216.  
  217. { Radio button }
  218. SetupNormalControl(Rec_My_Modal.theDialog,ResD_for_selections,Rec_My_Modal.Enable_for_selections,
  219.     Rec_My_Modal.Value_for_selections);
  220.  
  221. { Radio button }
  222. SetupNormalControl(Rec_My_Modal.theDialog,ResD_Radio_buttons,Rec_My_Modal.Enable_Radio_buttons,
  223.     Rec_My_Modal.Value_Radio_buttons);
  224.  
  225. SetupPopupMenu(Rec_My_Modal.theDialog,ResD_PopUp,Rec_My_Modal.Enable_PopUp,
  226.     mResD_PopUp,Rec_My_Modal.Value_PopUp);
  227.  
  228.  
  229. ExitDialog := false;                                    { Do not exit dialog handle loop yet }
  230.  
  231.  
  232. D_Setup_My_Modal(Rec_My_Modal.theDialog);                { Call user Dialog setup routine }
  233.  
  234. ShowWindow(Rec_My_Modal.theDialog);                            { Open a dialog box }
  235. SelectWindow(Rec_My_Modal.theDialog);                            { Lets see it }
  236.  
  237. repeat                                                { Start of dialog handle loop }
  238.     ModalDialog(@MyFilter,itemHit);                    { Wait until an item is hit }
  239.  
  240.     D_Hit_My_Modal(Rec_My_Modal.theDialog,itemHit,ExitDialog);{ Let user handle the item hit }
  241.  
  242.     if (itemHit = 32000) then                        { Check for update }
  243.         begin
  244.         Refresh_Dialog;                                { Draw any Lists, lines, or rectangles }
  245.         EndUpdate(Rec_My_Modal.theDialog);     { End of the update }
  246.         end
  247.     else
  248.         begin
  249.         GetDItem(Rec_My_Modal.theDialog,itemHit,DType,DItem,tempRect);    { Get item information }
  250.         CItem := ControlHandle(DItem);                { Get the control handle }
  251.         end;
  252.  
  253.     { Handle it real time }
  254.     if (itemHit = ResD_Cancel2) then            { Handle the Button being pressed }
  255.         begin
  256.         ExitDialog := true;                            { Close this dialog, exit }
  257.         end;
  258.  
  259.     if (itemHit = ResD_OK3) then            { Handle the Button being pressed }
  260.         begin
  261.         ExitDialog := true;                            { Close this dialog, exit }
  262.         end;
  263.  
  264.     if (itemHit = ResD_Checkboxes) then            { Handle the checkbox being pressed }
  265.         begin
  266.         temp := GetCtlValue(CItem);                    { Get the current Checkbox value }
  267.         SetCtlValue(CItem,BAND((temp + 1),1));            { Toggle the value to the opposite }
  268.         Rec_My_Modal.Value_Checkboxes := GetCtlValue(CItem);    { Get the current Checkbox value }
  269.         end;
  270.  
  271.     if (itemHit = ResD_for_selections) then            { Handle the Radio being pressed }
  272.         begin
  273.         SetCtlValue(CItem,1);
  274.         Rec_My_Modal.Value_for_selections := 1;    { Set the current Radio value }
  275.  
  276.         ClearTheRadio(Rec_My_Modal.theDialog,ResD_Radio_buttons,Rec_My_Modal.Value_Radio_buttons);
  277.         end;
  278.  
  279.     if (itemHit = ResD_Radio_buttons) then            { Handle the Radio being pressed }
  280.         begin
  281.         SetCtlValue(CItem,1);
  282.         Rec_My_Modal.Value_Radio_buttons := 1;    { Set the current Radio value }
  283.  
  284.         ClearTheRadio(Rec_My_Modal.theDialog,ResD_for_selections,Rec_My_Modal.Value_for_selections);
  285.         end;
  286.  
  287. {Popup}
  288.  
  289.  
  290. until (ExitDialog);                                    { Handle dialog items until exit selected }
  291.  
  292. { Get results after dialog }
  293. D_Exit_My_Modal(Rec_My_Modal.theDialog);    { Exiting the modal dialog }
  294.  
  295.  
  296. SetPort(SavedPort);                                    { Restore the previous grafport }
  297. DisposDialog(Rec_My_Modal.theDialog);        { Flush the dialog out of memory }
  298.  
  299. HoldOffUserEvents := false;                            { Let in the user events }
  300.  
  301. end;
  302.  
  303. { ======================================================= }
  304. { ======================================================= }
  305. end.
  306.